// Copyright Epic Games, Inc. All Rights Reserved.

#include "UI/LyraTouchRegion.h"


#include UE_INLINE_GENERATED_CPP_BY_NAME(LyraTouchRegion)

struct FGeometry;
struct FPointerEvent;

/**
 * 触摸开始时的原生处理
 * 设置应该模拟输入标志并调用父类方法
 * @param InGeometry 几何信息
 * @param InGestureEvent 手势事件
 * @return 回复
 */
FReply ULyraTouchRegion::NativeOnTouchStarted(const FGeometry& InGeometry, const FPointerEvent& InGestureEvent)
{
	bShouldSimulateInput = true; // 设置应该模拟输入为true
	return Super::NativeOnTouchStarted(InGeometry, InGestureEvent); // 调用父类方法
}

/**
 * 触摸移动时的原生处理
 * 设置应该模拟输入标志并调用父类方法
 * @param InGeometry 几何信息
 * @param InGestureEvent 手势事件
 * @return 回复
 */
FReply ULyraTouchRegion::NativeOnTouchMoved(const FGeometry& InGeometry, const FPointerEvent& InGestureEvent)
{
	// 只要玩家在我们的边界内触摸，就输入我们关联的键
	//InputKeyValue(FVector::OneVector);
	bShouldSimulateInput = true; // 设置应该模拟输入为true
	// 如果应该，连续触发输入
	return Super::NativeOnTouchMoved(InGeometry, InGestureEvent); // 调用父类方法
}

/**
 * 触摸结束时的原生处理
 * 设置应该模拟输入标志并调用父类方法
 * @param InGeometry 几何信息
 * @param InGestureEvent 手势事件
 * @return 回复
 */
FReply ULyraTouchRegion::NativeOnTouchEnded(const FGeometry& InGeometry, const FPointerEvent& InGestureEvent)
{
	bShouldSimulateInput = false; // 设置应该模拟输入为false
	return Super::NativeOnTouchEnded(InGeometry, InGestureEvent); // 调用父类方法
}

/**
 * 原生Tick函数
 * 如果应该模拟输入，则输入键值
 * @param MyGeometry 几何信息
 * @param InDeltaTime 增量时间
 */
void ULyraTouchRegion::NativeTick(const FGeometry& MyGeometry, float InDeltaTime)
{
	Super::NativeTick(MyGeometry, InDeltaTime); // 调用父类方法
	if(bShouldSimulateInput) // 如果应该模拟输入
	{
		InputKeyValue(FVector::OneVector); // 输入键值（单位向量）
	}
}